home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / TreeView / Tree.h < prev    next >
Text File  |  1995-06-12  |  3KB  |  80 lines

  1. //
  2. //    Tree.h -- a generic class to build tree data structures
  3. //        This class requires the String class, also by Don Yacktman.
  4. //        Written by Don Yacktman (c) 1993 by Don Yacktman.
  5. //                All rights reserved.
  6. //
  7. //    Subclasses should be designed to hold more data than just children and
  8. //         a String-based label...That's where the usefulness of the class
  9. //        becomes apparent.  By using a list, any number of children is ok.
  10. //
  11. //        You may use and copy this class freely as long as you
  12. //        comply with the following terms:
  13. //            (1) If you use this class in an application which you
  14. //                intend to sell commercially, as shareware, or otherwise,
  15. //                you may only do so with express written permission
  16. //                of the author.  Use in applications which will
  17. //                be distributed free of charge is encouraged.
  18. //            (2) You must include the source code to this object and
  19. //                all accompanying documentation with your application,
  20. //                or provide it to users if requested, free of charge.
  21. //            (3) Do not remove the author's name or any of the
  22. //                copyright notices
  23. //
  24.  
  25. #import <appkit/appkit.h>     // superclass is in there
  26. #import <stdio.h>
  27. #import "String.h"
  28.  
  29. @interface Tree:Object
  30. {
  31.     id branches;    // an instance of the list class
  32.     id label;        // node name
  33.     BOOL notCollapsed;    // print children when dumping if true.
  34. }
  35.  
  36.  
  37. // init with null label
  38. - init;
  39.  
  40. // designated initializer
  41. - initLabel:(const char *)newLabel;    // send a char * string
  42. - initLabelString:string;            // send a String object
  43.  
  44. // access to the label of this node
  45. - setLabel:(const char *)newLabel;
  46. - (const char *)label;
  47.  
  48. // clean up our mess
  49. - free;
  50.  
  51. // add a new child node
  52. - addBranch:child;
  53.  
  54. // Print the tree to a stream (file, whatever).  Call the root with level
  55. // set to zero, and set the indent string however you like; the indent
  56. // string should be something like "  " or "\t" to show how to indent to
  57. // the next level.  This method recursively traverses the tree's children.
  58. - dumpTree:(NXStream *)file level:(int)lev indent:(const char *)ind;
  59.  
  60. // set whether or not we print the children (we don't if collapsed)
  61. // when dumping.  This does NOT affect the tree's width or depth!
  62. - collapse;
  63. - uncollapse;
  64. - (BOOL)collapsed;
  65.  
  66. // when dumping the tree, if you want to add extra data to the output
  67. // before the newline and before children are printed, add it here.  If
  68. // you return NO, then the children won't be printed; this is how the
  69. // collapse stuff works.
  70. - (BOOL)moreData:(NXStream *)file level:(int)lev indent:(const char *)ind;
  71.  
  72. // How deep or wide is the tree?
  73. - (int) width;
  74. - (int) depth;
  75.  
  76. // Return the List object that contains ids of all the kids.
  77. - branches;
  78.  
  79. @end
  80.